
A subcomponent that inherits the bindings from a parent {@link Component} or
{@link Subcomponent}. The details of how to associate a subcomponent with a parent are described
in the documentation for {@link Component}.

@since 2.0

@Retention(RUNTIME) // Allows runtimes to have specialized behavior interoperating with Dagger.
@Target(TYPE)
@Documented
public @interface Subcomponent {
  
  A list of classes annotated with {@link Module} whose bindings are used to generate the
  subcomponent implementation.  Note that through the use of {@link Module#includes} the full set
  of modules used to implement the subcomponent may include more modules that just those listed
  here.
  
  Class<?>[] modules() default {};
  
  
  A builder for a subcomponent.  This follows all the rules of {@link Component.Builder}, except
  it must appear in classes annotated with {@link Subcomponent} instead of {@code Component}.
  Components can have methods that return a {@link Subcomponent.Builder}-annotated type,
  allowing the user to set modules on the subcomponent using their defined API.
  
  @Target(TYPE)
  @Documented
  @interface Builder {}
}